package com.laf.quartz.task;

import com.laf.common.constant.CacheConstants;
import com.laf.common.core.redis.RedisCache;
import com.laf.manage.domain.po.Dynamic;
import com.laf.manage.service.IDynamicService;
import com.laf.manage.service.impl.DynamicEsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Map;

/**
 * TODO  将 redis 中的 hits 值同步到数据库 和 es 中
 */
@Component("dynamicHitsTask")
public class DynamicHitsTask {
    @Autowired
    private IDynamicService dynamicService;

    @Autowired
    private DynamicEsService dynamicEsService;

    @Autowired
    private RedisCache redisCache;

    /**
     * 同步浏览量 到 mysql 和 es 中
     */
    public void syncHits() {
        // 查询出所有的动态的缓存的浏览量
        Map<String, Object> cacheMap = redisCache.getCacheMap(CacheConstants.HITS_PREFIX);
        // 将封装成一个 po 集合更新 mysql 和 es
        ArrayList<Dynamic> dynamicList = new ArrayList<>(cacheMap.size());
        cacheMap.forEach((k,v)->{
            Dynamic dynamic = new Dynamic();
            dynamic.setId(Long.parseLong(k));
            dynamic.setHits(Integer.parseInt(v.toString()));
            dynamicList.add(dynamic);
        });

        // 同步 mysql 和 es 中浏览量的数据
        dynamicService.batchUpdateHits(dynamicList);
        dynamicEsService.batchUpdateHits(dynamicList);

    }

}
